from peewee import (CharField, IntegerField, DateTimeField, DateField, BigIntegerField,
                    AutoField)
from playhouse.mysql_ext import JSONField

from application.db import get_database_connection
from application.db.mysql_db.base_mysql_model import BaseMysqlModel


class CnArticleList(BaseMysqlModel):
    """中文文献库文献列表"""
    article_id = CharField(max_length=32)  # 文献ID，cnlt+入库时间(14位年月日时分秒+6位微秒)+6位随机数组成的30位字符串(可参考abs_article_list的ID生成)
    article_name = JSONField()  # 文献标题，格式如{"chi":"中文标题", "eng":"英文标题"}
    article_doi = CharField(max_length=255, null=True, index=True)  # 文献DOI号
    journal_code = CharField(max_length=32, index=True)  # 文献期刊代码，表cn_article_journal_list标识
    article_year = CharField(max_length=16)  # 文献年份
    article_language = CharField(max_length=32,
                                 default='chi')  # 文献语言MARC代码，表marc_language_code_dict标识，取值["chi"(中文), "eng"(英文)]
    original_file = JSONField(
        null=True)  # 文献原文的OSS存储路径，格式如{"bucket_name":"文件存储的bucket名称", "file_path":"文件在bucket下的存储路径"}，默认存储在medpeer-article的cn-original-article目录下，按照文献发表年份拆分文件夹
    file_size = BigIntegerField(default=0)  # 文献原文文件大小（字节数）
    upload_time = DateTimeField(null=True, index=True)  # 文献原文文件上传（最后更改）时间
    published_time = DateField(null=True)  # 文献发表/出版时间，即纸质发表时间，对于仅有网络发表的记录网络发表时间
    published_time_precision = CharField(max_length=1, null=True)  # 文献发表时间描述精度，Y为年，M为月，D为日
    article_time = JSONField(
        null=True)  # 文献生命周期时间点，格式如{"received_date":"收稿时间", "revised_date":"文献最后返修完成时间", "accepted_date":"录用时间", "online_date":"网络发表时间，对于存在网络刊出的填写"}
    published_info = JSONField(null=True)  # 文献发表信息，格式如{"volume":"卷","issue":"期","page":"页"}
    clc_codes = JSONField(null=True)  # 文献的中图分类号，格式如[clc_code]
    platform_id = CharField(max_length=255, null=True,
                            index=True)  # 文献来源平台标识，当article_creator取值["yiigle"(中华医学数据库), "cnki"(知网), ...]时，记录"中华医学数据库的文献ID"或"知网的文献ID"等，人工创建文献时可为空
    article_creator = CharField(
        max_length=255)  # 文献创建者，对于人工创建的文献标识创建人ID，对于批量导入的文献标识导入来源，取值["yiigle"(中华医学数据库), "cnki"(知网), ...]
    revise_time = DateTimeField()  # 文献信息人工/导入的创建/入库或修订时间

    class Meta:
        table_name = 'cn_article_list'
        database = get_database_connection('default')  # 使用默认数据库

if __name__ == '__main__':
    # 精确匹配整个 JSON
    row=CnArticleList.select()
    for r in row:
        print(r)